package com.styletransfer.controller;

import com.styletransfer.model.ApiResponse;
import com.styletransfer.model.Like;
import com.styletransfer.service.LikeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 点赞控制器
 * 
 * 提供点赞相关的API接口，包括添加点赞、取消点赞、查询点赞等
 */
@RestController
@RequestMapping("/like")
public class LikeController {

    @Autowired
    private LikeService likeService;

    /**
     * 添加点赞
     * 
     * @param like 点赞信息
     * @return API响应
     */
    @PostMapping("/add")
    public ApiResponse<Like> addLike(@RequestBody Like like) {
        return likeService.addLike(like);
    }

    /**
     * 取消点赞
     * 
     * @param type 点赞类型（1:风格, 2:组合, 3:作品）
     * @param targetId 目标ID
     * @return API响应
     */
    @DeleteMapping("/cancel")
    public ApiResponse<Void> cancelLike(
            @RequestParam Integer type,
            @RequestParam Long targetId) {
        return likeService.cancelLike(type, targetId);
    }

    /**
     * 检查是否已点赞
     * 
     * @param type 点赞类型（1:风格, 2:组合, 3:作品）
     * @param targetId 目标ID
     * @return API响应
     */
    @GetMapping("/check")
    public ApiResponse<Boolean> checkLike(
            @RequestParam Integer type,
            @RequestParam Long targetId) {
        return likeService.checkLike(type, targetId);
    }

    /**
     * 查询用户的点赞
     * 
     * @param type 点赞类型（1:风格, 2:组合, 3:作品）
     * @return API响应
     */
    @GetMapping("/list")
    public ApiResponse<List<Like>> getUserLikes(@RequestParam Integer type) {
        return likeService.findByUser(type);
    }

    /**
     * 查询目标的点赞数
     * 
     * @param type 点赞类型（1:风格, 2:组合, 3:作品）
     * @param targetId 目标ID
     * @return API响应
     */
    @GetMapping("/count")
    public ApiResponse<Integer> getLikeCount(
            @RequestParam Integer type,
            @RequestParam Long targetId) {
        return likeService.countByTarget(type, targetId);
    }
    
    /**
     * 获取用户收到的点赞总数
     * 
     * @param userId 用户ID，如果不提供则获取当前登录用户的点赞数
     * @return API响应
     */
    @GetMapping("/user/received")
    public ApiResponse<Integer> getUserReceivedLikesCount(
            @RequestParam(required = false) Long userId) {
        return likeService.countReceivedLikes(userId);
    }
}
